/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Seguridad.Controlador;

import CharliesCookies.MainController;
import com.dp1.pucp.Seguridad.DAO.*;
import com.dp1.pucp.Seguridad.Vista.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.dp1.pucp.Modelo.Clases.Perfil;
import com.dp1.pucp.Modelo.Clases.Rolxperfil;
import com.dp1.pucp.Seguridad.Vista.RolxPerfilGUI;
import com.dp1.pucp.Util.Validaciones;
import java.util.ArrayList;

/**
 *
 * @author plantilla
 */
public class PerfilControlador {
    
    public PerfilDAO dao;
    public PerfilGUI perfilGUI;
    private Perfil perfil;
    public ArrayList<Rolxperfil> listaRoles = new ArrayList<>();
    
    public PerfilControlador(PerfilDAO dao, PerfilGUI view, Perfil perfil) {
        this.dao = dao;
        this.perfilGUI = view;
        this.perfil = perfil;
        
        if (perfil != null) {
            perfilGUI.setTitle("Editar Perfil");
        } else {
            perfilGUI.setTitle("Agregar Perfil");
        }
        perfilGUI.addGuardarListener(new guardarPerfilListener());
        perfilGUI.addLimpiarListener(new limpiarPerfilListener());
        perfilGUI.addCancelarListener(new cancelarPerfilListener());
        perfilGUI.addAgregarRolListener(new agregarRolListener(this));
        perfilGUI.addEliminarRolListener(new eliminarRolListener());
        perfilGUI.addEliminarTodoListener(new eliminarTodoListener());
        perfilGUI.llenaComboEstado(dao.listarEstado());
        perfilGUI.setFormulario(perfil);
        
        listaRoles = dao.listarRolxPerfil(perfil);
        
        perfilGUI.llenaGrillaRol(listaRoles);
        
        
    }
    
    class guardarPerfilListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            int cod = 0;
            Perfil c = new Perfil();
            //c.setIdperfil(perfilGUI.perfil.getIdperfil()); //codigo ?''
            String nombre = perfilGUI.getNombre();
            
            
            int estado = perfilGUI.getEstado();
            if (nombre.equals("")) {
                Validaciones.mostrarMensajeErrorVal("Debe ingresar un nombre");
                return;
            }
            if (estado == 0) {
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar un estado");
                return;
            }
            
            c.setEstado(estado);            
            c.setNombre(perfilGUI.getNombre());
            c.setDescripcion(perfilGUI.getDescripcion());
            
            if (perfil != null) {
                c.setIdperfil(perfil.getIdperfil());
            }
            Perfil nuevo = dao.guardarPerfil(c);
            
            
            ArrayList<Rolxperfil> lista = new ArrayList<>();
            lista = dao.listarRolxPerfil(nuevo);
            
            if (lista != null) {
                for (int i = 0; i < lista.size(); i++) {
                    dao.eliminarRolxperfil(lista.get(i));
                }
            }
            
            
            
            for (int i = 0; i < listaRoles.size(); i++) {
                listaRoles.get(i).setIdrolxperfil(0);
                listaRoles.get(i).setPerfil(nuevo);
                dao.guardarRolxPerfil(listaRoles.get(i));
            }
            
            Validaciones.mostrarMensajeAvisoVal("Se guardo el perfil exitosamente.");
            
            LogDAO.insertarLog(MainController.usuario, "Insertar Perfil");
            perfilGUI.dispose();
            
        }
    }
    
    public void llamarListarRoles() {
        perfilGUI.llenaGrillaRol(listaRoles);
    }

    class limpiarPerfilListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            perfilGUI.LimpiarDatos();
        }
    }
    
    class cancelarPerfilListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            perfilGUI.dispose();
        }
    }
    
    class agregarRolListener implements ActionListener {

        PerfilControlador controlador;
        
        public agregarRolListener(PerfilControlador c) {
            this.controlador = c;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            RolxPerfilGUI rolPerfilGUI = new RolxPerfilGUI(controlador.perfilGUI, true);
            RolxPerfilControlador c = new RolxPerfilControlador(dao, rolPerfilGUI, controlador);
            rolPerfilGUI.setVisible(true);
        }
    }
    
    class eliminarRolListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int sel = perfilGUI.getFilaSel();
            if (sel != -1) {
                Rolxperfil rxp = listaRoles.get(sel);
                listaRoles.remove(sel);
                perfilGUI.llenaGrillaRol(listaRoles);
            } else {
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar un rol");
            }
        }
    }
    
    class eliminarTodoListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int tam = listaRoles.size();
            for (int i = 0; i < tam; i++) {
                listaRoles.remove(0);
            }
            perfilGUI.llenaGrillaRol(listaRoles);
        }
    }
}
